﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using Tecnopez.Globals;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using Microsoft.Practices.EnterpriseLibrary.Validation;

public partial class Modules_ClasificacionIncubacion_ABMClaseDeLote : System.Web.UI.Page
{
    private System.Web.UI.WebControls.GridView grdDatos; //Para acceso rapido
    protected void Page_Load(object sender, EventArgs e)
    {
        //Este es para manipular la grilla mas facil dentro del abm.
        grdDatos = TecnopezDataGRIDABMView1.grdDatosAbmView;
        
        //Con estas lineas de codigo configuran toda la grilla no se necesita mas
        //El true or false determina si es compact o no, tambien tiene sobrecargado el metodo para recibir botones extra.
        //en ese caso van a tener que invocar el evento a manopla.
        TecnopezDataGRIDABMView1.setupGrid<claseDeLote>(cargarGrilla,TecnopezDataGRIDABMView1_ViewGridClic,null, true, this.ViewState);


        cmdEliminar.Attributes.Add("onClick", "return confirm('Esta seguro de eliminar el registro?');");
     

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/ic_soporte.gif";
        master.Titulo = "Gestión de clases de lotes.";
        this.lblTituloAbm.Text = "Datos de la clase de lote";

        if (!IsPostBack)
            this.setMode(PageMode.ListMode);




    }

    void TecnopezDataGRIDABMView1_ViewGridClic(int indice)
    {
        cargarGrilla();
        if (grdDatos.DataKeys.Count == 0)
            return;
        int idClaseDeOvas = (int)grdDatos.DataKeys[indice].Value;
        claseDeLote.getManager.ClearFilters();
        claseDeLote.getManager.AddFilter(grdDatos.DataKeyNames[0], BussinessLogicTecnoPez.GenericManager<claseDeLote>.filterOperator.Equals, idClaseDeOvas);
        claseDeLote aux = claseDeLote.getManager.GetOne();
        txtID.Text = aux.idClaseDeLote.ToString();
        txtDescripción.Text = aux.Descripcion.ToString();
        this.setMode(PageMode.ViewMode);
    }

    private void cargarGrilla()
    {
        //Filtrar como deseeen
        claseDeLote.getManager.ClearFilters();
        claseDeLote.getManager.ClearOrders();
        claseDeLote.getManager.AddFilter("Descripcion", GenericManager<claseDeLote>.filterOperator.Like, txtBuscarDescripcion.Text + "%");
        //Acordarse de ordenar las cosas
        if (ViewState["orden"] != null)
        {
            claseDeLote.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<claseDeLote>.Order.orderDirection)ViewState["ordenDireccion"]);

        }
        //y no menos importante llenen la tabla!
        grdDatos.DataSource = claseDeLote.getManager.GetFilter();
        grdDatos.DataBind();
    }
    protected void cmdBuscar_Click(object sender, EventArgs e)
    {
        setMode(PageMode.ListMode);
    }
    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        setMode(PageMode.NewMode);
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    private void setMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        txtID.Enabled = false;
        txtID.ForeColor = System.Drawing.Color.Black;
        switch (mode)
        {
            case PageMode.EditMode:
                wzrABM.ActiveStepIndex = 1;
                cmdEditar.Visible = false;
                txtDescripción.Enabled = true;
                cmdEliminar.Visible = false;
                break;
            case PageMode.ListMode:
                wzrABM.ActiveStepIndex = 0;
                break;
            case PageMode.NewMode:
                cmdEditar.Visible = false;
                cmdEliminar.Visible = false;
                txtDescripción.Text = "";
                txtDescripción.Enabled = true;
                txtID.Text = "";
                wzrABM.ActiveStepIndex = 1;
                break;
            case PageMode.ViewMode:
                wzrABM.ActiveStepIndex = 1;
                txtDescripción.Enabled = false;
                cmdEditar.Visible = true;
                cmdEliminar.Visible = true;
                txtDescripción.ForeColor = System.Drawing.Color.Black;
                break;
            case PageMode.DeleteMode:
                break;
        }
    }
    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        lblResultado.Text = "";
        setMode(PageMode.ListMode);
    }
    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        if (getMode() == PageMode.NewMode)
        {
            AltaEntidad();

        }
        else if (getMode() == PageMode.EditMode)
        {
            ModificacionEntidad();
        }else
        {
            this.setMode(PageMode.ListMode);
        }
    }

    private void ModificacionEntidad()
    {
        int idClaseDeOvas = int.Parse(txtID.Text);
        claseDeLote.getManager.ClearFilters();
        claseDeLote.getManager.AddFilter(grdDatos.DataKeyNames[0], BussinessLogicTecnoPez.GenericManager<claseDeLote>.filterOperator.Equals, idClaseDeOvas);
        claseDeLote aux = claseDeLote.getManager.GetOne();
        aux.Descripcion = txtDescripción.Text;
        if (validar(aux) && claseDeLote.getManager.Update(aux))
        {
            lblResultado.Text = "";
            this.setMode(PageMode.ListMode);
            cargarGrilla();

        }
        else
        {
            lblResultado.Text = "Error al modificar el lote de ovas.";
            Functions.LogError(claseDeLote.getManager.GeneratedException);
        }
    }

    private void AltaEntidad()
    {
        claseDeLote nueva = new claseDeLote();
        nueva.Descripcion = txtDescripción.Text;

        if (validar(nueva))
        {
            if (claseDeLote.getManager.Insert(nueva))
            {
                lblResultado.Text = "";
                this.setMode(PageMode.ListMode);
                cargarGrilla();

            }
            else
            {
                lblResultado.Text = "Error al crear la clase de ovas.";
                Functions.LogError(claseDeLote.getManager.GeneratedException);
            }
        }
    }
    private bool validar(claseDeLote objeto)
    {
        ValidationResults v = Validation.Validate<claseDeLote>(objeto);
        if (!v.IsValid)
        {
            lblResultado.Text="Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;
    }
   

   
    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        this.setMode(PageMode.EditMode);
    }

    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        this.setMode(PageMode.DeleteMode);
        EliminarEntidad();
    }
   
   

    private void EliminarEntidad()
    {
        if (getMode() == PageMode.DeleteMode)
        {
            int idClaseDeOvas = int.Parse(txtID.Text);
            claseDeLote.getManager.ClearFilters();
            claseDeLote.getManager.AddFilter(grdDatos.DataKeyNames[0], BussinessLogicTecnoPez.GenericManager<claseDeLote>.filterOperator.Equals, idClaseDeOvas);
            claseDeLote aux = claseDeLote.getManager.GetOne();
            if (claseDeLote.getManager.Delete(aux)>0)
            {
                lblResultado.Text = "";
                this.setMode(PageMode.ListMode);
                cargarGrilla();

            }
            else
            {
                lblResultado.Text = "Error al eliminar clase de ovas.";
                Functions.LogError(claseDeLote.getManager.GeneratedException);
            }
        }
    }
    protected void btnSi_Click1(object sender, EventArgs e)
    {

        EliminarEntidad();

    }
}
